/*
 * xphtml.h
 *
 *  Created on: 2010-05-29
 *      Author: lxb
 */

#ifndef _XPHTML_H_INCLUDED_
#define _XPHTML_H_INCLUDED_

#ifdef __cplusplus
extern "C" {
#endif

/******************************************************************************
 * <Includes>
 *****************************************************************************/
#include <xputil.h>
/******************************************************************************
 * <Defines>
 *****************************************************************************/

/******************************************************************************
 * <Enums>
 *****************************************************************************/
typedef enum xphtml_node_type xphtml_node_type;
enum xphtml_node_type
{
    XPHTML_NODE_ELEMENT,
    XPHTML_NODE_ATTRIBUTE,
    XPHTML_NODE_TEXT,
};
/******************************************************************************
 * <Typedefs>
 *****************************************************************************/
typedef struct xphtml_node xphtml_node;
struct xphtml_node
{
    xphtml_node_type type;
    char *name;

    xphtml_node *parent;
    xphtml_node *next;
};

typedef struct xphtml_attribute xphtml_attribute;
struct xphtml_attribute
{
    xphtml_node node;
    char *value;
};

typedef struct xphtml_element xphtml_element;
struct xphtml_element
{
    xphtml_node node;
    xphtml_node *childList;
};

typedef struct xphtml_context xphtml_context;
struct xphtml_context
{
    char* tagName;
    int isTagClose;
    int isDeclare;
    char eventChar;
    xpcharstack *charStack;
    xpptrstack *nodeStack;
    xphtml_element *curElement;

    xphtml_node *rootNode;
};

/******************************************************************************
 * <API declarations>
 *****************************************************************************/
void xphtml_node_show(xphtml_node *node, int level);
void xphtml_node_delete(xphtml_node *node);
xphtml_node* xphtml_parsefile(char *filename);
xphtml_node* xphtml_parsestring(char* str);

#ifdef __cplusplus
}
#endif

#endif /* _XPHTML_H_INCLUDED_ */


